import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter_structure/utils/logger.dart';


class AppDevice {
  // 单例实例
  static final AppDevice _instance = AppDevice._internal();

  // 工厂构造函数
  factory AppDevice() {
    return _instance;
  }

  // 私有构造函数
  AppDevice._internal();

  // 设备信息字段
  String operatingSystem = "Unknown"; // 操作系统名称（如 Android、iOS）
  String systemVersion = "Unknown"; // 系统版本号
  String deviceBrand = "Unknown"; // 品牌信息
  String deviceModel = "Unknown"; // 型号
  int totalMemoryInMB = 0; // 总内存（MB）

  /// 初始化设备信息
  Future<void> initDeviceInfo() async {
    final deviceInfo = DeviceInfoPlugin();
    // 判断平台
    if (Platform.isAndroid) {
      await _initAndroidInfo(deviceInfo);
    } else if (Platform.isIOS) {
      await _initIosInfo(deviceInfo);
    } else {
      operatingSystem = Platform.operatingSystem;
      systemVersion = Platform.version;
    }
  }

  /// 初始化 Android 信息
  Future<void> _initAndroidInfo(DeviceInfoPlugin deviceInfo) async {
    final androidInfo = await deviceInfo.androidInfo;
    operatingSystem = "Android";
    systemVersion = androidInfo.version.release;
    deviceBrand = androidInfo.brand;
    deviceModel = androidInfo.model;
    // 获取 Android 的总内存
    totalMemoryInMB = await _getAndroidTotalMemoryInMB();
  }

  /// 初始化 iOS 信息
  Future<void> _initIosInfo(DeviceInfoPlugin deviceInfo) async {
    final iosInfo = await deviceInfo.iosInfo;
    operatingSystem = "iOS";
    systemVersion = iosInfo.systemVersion;
    deviceBrand = iosInfo.name;
    deviceModel = iosInfo.utsname.machine;
    // iOS 总内存目前需要通过原生平台通道支持，默认返回 0
    totalMemoryInMB = 0; // 或者通过平台通道获取
  }

  /// 获取 Android 总内存（通过读取 /proc/meminfo）
  Future<int> _getAndroidTotalMemoryInMB() async {
    try {
      final file = File('/proc/meminfo');
      if (await file.exists()) {
        final lines = await file.readAsLines();
        for (final line in lines) {
          if (line.startsWith('MemTotal:')) {

            final memKb = int.parse(line.split(RegExp(r'[\s]+'))[1]);
            return (memKb / 1024).floor(); // 转换为 MB
          }
        }
      }
    } catch (e , stackTrace) {
      Logger.error('获取 Android 总内存失败: $e' , tag: "_getAndroidTotalMemoryInMB" , stackTrace:stackTrace );
    }
    return 0;
  }

  void deviceInfo() {
    Logger.info(
      "操作系统: $operatingSystem ;系统版本: $systemVersion ;设备品牌: $deviceBrand ;设备型号: $deviceModel ;总内存大小: ${totalMemoryInMB}MB",
      tag: "DeviceInfo",
    );
  }

  /// 判断是否需要限制并发数（基于内存、其他条件）
  bool shouldLimitConcurrency() {
    Logger.info("$totalMemoryInMB , ${totalMemoryInMB <2000}" , tag: "shouldLimitConcurrency");
    return totalMemoryInMB < 2000; // 如果设备内存小于 2GB，则限制并发数
  }

  /// 提供是否影响任务优先级的逻辑（这里可以灵活扩展）
  bool shouldAffectPriority() {
    return false; // 具体逻辑可以根据需求定义
  }
}
